专利摘要:
關於作業系統應用程式介面的資訊係以已知格式產生且儲存於作業系統之中的已知位置。此資訊完整地描述作業系統所暴露的所有API。此資訊包括但非限於關於多種類型之API之經命名的元件的資訊,該等類型的種類例如基本類型、列舉類型、結構、委派、介面、級別、方法、特性及事件。此資訊係儲存於API元資料檔案中。語言編譯器或解譯器使用此API資訊而以目標語言建立原始系統API的自然且熟悉的表現。此表現因語言而有所不同。語言編譯器或解譯器可於編譯時間及/或運行時間讀取API資訊。使用元資料以允許應用程式連結至API中經命名的元件。建立使用元資料的投射,以將API中經命名的元件映射至目標語言中經命名的元件,且定義包裝,該等包裝編列介於目標表現及原始作業系統表現之間的彼等元件的資料。
公开号:TW201310341A
申请号:TW100136566
申请日:2011-10-07
公开日:2013-03-01
发明作者:Harold Pierson;Brent Rector;Martyn Lovell;Mahesh Prakriya;Stephen Rowe;Tassaduq Basu;Robert A Wlodarczyk;Elliot H Omiya;Jerry Dunietz;Ales Holecek;Lawrence W Osterman;Wei Zeng;Neeraj Wadhwa;Shakeel Solkar;Michael Aksionkin
申请人:Microsoft Corp;
IPC主号:G06F9-00
专利说明:
將作業系統之原始應用程式介面投射至其它程式語言
本發明係關於將作業系統之原始應用程式介面投射至其他程式語言。
作業系統典型地具有數個應用程式介面,該等應用程式介面允許應用程式存取由作業系統所支援的功能。該等API典型地藉由作業系統,使用電腦程式語言中的經命名的檔案或物件而指定。舉例而言,C程式語言使用可具有諸如「interface.h」名稱的標頭檔案。類似地,在C#中,稱為「P/Invoke」簽名的機制係用以存取作業系統API。撰寫電腦程式而對作業系統API有使用用途的人典型地在程式中對經命名的檔案或物件包括參考值,或此人典型地使用由程式語言提供的其他機制。舉例而言,該語言接著包括以該API所使用的語法,呼叫由該API所定義的功能。
以此方式定義的API無法由非撰寫語言的其他語言而直接存取。為了使得以其他語言撰寫的程式能夠存取,API被「包裝」。此包裝典型地必須對每一個API及每一個語言以人工的方式完成,且此包裝典型地必須對目標語言及API及作業系統兩者具有深入的瞭解。結果,許多作業系統API無法利用。
提供此【發明內容】以簡化的形式介紹概念之選擇,以下【實施方式】中將進一步描述該概念之選擇。此發明內容並非意欲識別所主張標的之關鍵特徵或重要特徵,亦非意欲用以限制所主張標的之範疇。
當建立作業系統時,關於API的資訊係以已知的格式產生且儲存於作業系統之中的已知位置。此資訊完整地描述作業系統所暴露的所有API。此資訊包括但非限於關於多種類型之API之經命名的元件的資訊,該等類型的種類例如基本類型、列舉類型、結構、委派、介面、級別、方法、特性及事件。此資訊係儲存於API元資料檔案中。
語言編譯器或解譯器使用此API資訊而以目標語言建立原始系統API的自然且熟悉的表現。此表現因語言而有所不同(正如何者為自然且熟悉係因語言而有所不同)。語言編譯器或解譯器可於編譯時間及/或運行時間(任何最適合用於討論中的語言者)讀取API資訊。舉例而言,類似C++的靜態編譯語言會純粹地於編譯時間消耗元資料,而類似Python或JavaScript的動態語言會純粹地於運行時間消耗元資料。使用元資料以允許應用程式連結至API中經命名的元件。建立使用元資料的投射,以將API中經命名的元件映射至目標語言中經命名的元件,且定義包裝,該等包裝編列介於目標表現及原始作業系統表現之間的彼等元件的資料。
因此,在一個態樣中,描述作業系統的應用程式介面之元資料係儲存於記憶體中。以程式語言給定在程式中經命名的元件的指示,該指示連結至應用程式介面之一者的元件,則經命名的元件係使用元資料投射至該程式語言之中。投射可於程式的編譯或解譯期間發生。投射可包括以程式語言建立編碼,該編碼用於建立一或更多元件;且根據類型編列用於所建立的元件之資料。包括介面之方法、特性及事件的介面可如此投射。投射亦可包括將例外從作業系統傳播至應用程式。
此舉將作業系統API投射至其他語言中係可實現於電腦實施程序、製造物品,或計算機器中,該製造物品包括一或更多電腦儲存媒體。
在以下說明書中,參考形成說明書的一部分的隨附圖式,且其中藉由圖示的方式來顯示此技術的特定示例性實施。應瞭解可使用其他實施例,且可在不悖離所揭露的範疇之情況下改變結構。
以下段落提供示例性作業環境,其中可實施將原始系統API投射至其他語言之中的實例。
參看第1圖,運行中的應用程式100在運行時間期間存取作業系統104的原始系統API 102。為了使得此應用程式具有此功能,典型地使用諸如編輯器的開發工具112撰寫程式106。該等程式係由語言的編譯器或解譯器108進行編譯或解譯任一者,以提供運行時間應用程式100。開發工具112,及編譯器或解譯器108存取元資料110,該元資料110完整描述作業系統的API 102。開發工具112幫助開發者撰寫程式,但透過元資料告知開發者可取得的原始系統API,且允許使用開發者的程式語言存取彼等API。編譯器或解譯器使用元資料實現將原始系統API投射至開發者的程式語言中。具體而言,在API中經命名的元件係映射至目標語言的經命名的元件,且在彼等元件中的值係編列於由目標語言及作業系統所使用的格式之間。
建立此系統係由建立具有元資料所描述的API的作業系統而開始。元資料代表以程式語言獨立形式的API描述的各個經命名的元件。此元資料提供完整的介面描述。結合的系統元資料可以ECMA-335 CLI格式儲存於一連串的元資料檔案中,但特定格式對本發明係無關緊要的。
給定此情境,此系統的示例性實施例將更詳細地與第2-4圖連接而描述。
在第2圖中,現將描述開發工具的操作實例。當撰寫電腦語言時,開發者通常使用諸如編輯器的開發工具的形式。此編輯器可執行各種任務,例如驗證語法及對由開發者輸入的字串提議完備化。在此環境中,描述作業系統應用程式介面的元資料可以各種方式使用。具體而言,元資料可用以允許開發者發現可取得的API。開發工具接收200字串輸入,例如可用於API中作為識別符(例如「滑鼠」)或名稱空間(例如作業系統的名稱)的關鍵字。可搜尋202元資料,以識別具有將所接收的輸入作為識別符或名稱空間的一部分的元件。可收集匹配元件組的識別符且將該等匹配元件組的識別符返回204至開發工具。開發工具可將元件呈現206至開發者用於選擇,且開發工具可使用來自元資料的資訊,以適合開發者正在使用的電腦語言的格式呈現該等元件。
現參看第3圖,現將描述語言編譯器或解譯器的操作的實例。在處理電腦程式中,不論編譯或解譯電腦程式,均偵測300電腦程式的一序列元件。決定302電腦程式的元件是否為作業系統的API的參考值。舉例而言,此可藉由在元資料中查找元件而決定。使用元資料建立304投射元件,該元資料允許資料在電腦程式及作業系統之間交換。具體而言,編譯器或解譯器實施投射,該投射將作業系統API中的經命名的元件投射至目標語言中的經命名的元件。元資料允許建立物件,且元資料允許於程式所使用的資料格式及作業系統所使用的格式之間編列值。於運行時間,此元件允許程式存取306作業系統的API,且此元件允許編列介於應用程式及作業系統之間的資料。
在已經描述此系統的大致處理之後,現將描述特定實例。具體而言,現將描述在描述API的元資料及API的元件的電腦語言特定表現之間更加詳細的示例性投射。
以下說明係僅為一個可能實施,且並非考慮為限制本發明。具體而言,應瞭解以下僅為可實施的語言投射的實例,且可能具有對此語言的其他實施,且可能具有其他投射至其他語言之中。
在此實例中,JavaScript係為原始系統API將使用元資料而投射之程式語言。在以下的實例中,給定某些種類的元件如何投射至JavaScript程式語言之中的解釋。
當腳本嘗試建立由作業系統API定義的具體物件的實例時,投射器物件合理地用於存取元資料,以建立於不同類型之間轉換資料的編列存根,可能牽涉建立代理物件,且投射器物件用於派遣方法呼叫、管理事件且管理回撥功能。
對於基本類型的經命名的物件,例如整數、字串及類似者,以下為將彼等API元件投射至JavaScript之中的方式。
作業系統具有數個簽署的及未簽署的整數類型,例如一個位元組的未簽署整數(UInt8)、四個位元組的未簽署整數(UInt32)、四個位元組的簽署整數(Int8)及八個位元組的簽署及未簽署整數(UInt64及Int64)。該等類型的經命名的元件係投射成JavaScript Number值。當JavaScript Number被編列成作業系統值時,接著該等值被類型轉換為JavaScript數,且接著跟隨著由ES5 ToInt32規格所定義的程序。對於UInt8,結果具有應用2^8模數。對於Int32,應用2^16模數。對於UInt32,應用2^32模數。
編列成JavaScript值的64位元的整數若經簽署而落入[-2^53,2^53]之範圍,或若未經簽署而落入[0,2^53]之範圍,則該64位元的整數被表示為標準的Number值。若落於此範圍之外,則編列成JavaScript值的64個位元的整數被表示為Number值,該Number值具有維持全部64位元的整數資料的自訂備用儲存。對該等自訂Number值上的數學運算造成值被類型轉換成為在[-2^53,2^53]範圍中的標準Number表示,或若未簽署則在[0,2^53]範圍中。若值落於此範圍之外,則將提出類型錯誤。若編列成64位元整數的JavaScript值係本身為經投射的值,則此JavaScript值被直接地指派;否則,通過在值上應用EC5“ToInteger”轉換的結果。
係為字母(由16位元萬國碼表示)、字串或全球唯一識別符(GUID)的作業系統API的經命名的元件,可表示為JavaScript字串,且該等經命名的元件在JavaScript中被投射成經命名的字串。
編列成JavaScript的字母被轉換成JavaScript字串值,該JavaScript字串值含有由萬國碼值所表示的單一字母。編列成字母的JavaScript值透過ES5 ToString操作而類型轉換成為JavaScript字串,且保持第一字母。單一字母接著以Char16值通過。
編列成JavaScript的字串被轉換成JavaScript String。編列成字串的JavaScript值被類型轉換成為JavaScript字串。
編列成JavaScript值的GUID被轉換成字串格式。編列成GUID的JavaScript值被類型轉換成為字串,且該JavaScript值接著被剖析成由作業系統所使用的格式。
作業系統可具有API,該API具有經命名的元件,其中該經命名的元件係為代表時間中一點的DateTime結構,或該經命名的元件係為代表時間的量的TimeSpan結構。DateTime結構可投射成JavaScript,成為具有備用儲存匹配DateTime結構資料(該DateTime結構資料具有與Date實例不同的範圍及精密度)的Date實例。TimeSpan結構被轉換成毫秒,且返回成為JavaScript Number。類似地,JavaScript Number可由毫秒轉換成100-十億分之一秒的單位,以通過作為TimeSpan結構。
應瞭解,藉由解譯元資料,在某些情況中投射亦可將來自原始環境的類型以語言投射重新映射至存在的類型。舉例而言,當原始API中的類型及語言投射具有相容的資料佈局時,此舉係可能且所欲的,而可立即以基本資料的類型發生。以此元資料映射,投射可單純地直接將所有操作重新導向原始類型,該等操作例如在語言類型上的方法或特性。此舉對語言開發者更自然且熟悉地使用該等類型。舉例而言,DateTime結構重新映射可以此方式實施。在原始的API中,DateTime結構在元資料中被暴露為Windows.Foundation.DateTime而無任何額外的操作。在C#投射中,此類型於具有豐富支援的C#中可重新導向至System.DateTimeOffset。
如另一實例,若在API中經命名的元件係一方法,則此方法具有HRESULT的值作為該方法之返回類型,該返回類型係轉換成JavaScript中的例外。返回的HRESULT藉由JavaScript引擎檢查成功性。若HRESULT表明失敗,則JavaScript引擎在JavaScript側上投擲例外。因此,對於作業系統API的JavaScript調用的方法,HRESULT失敗係浮現為JavaScript Exception。對於消耗JavaScript方法的API方法(例如以下所述的回撥或委派),JavaScript方法呼叫被包裝於例外方塊中(或由JavaScript主機API提供的均等),使得捕獲的例外可傳播為HRESULTS。然而,作業系統亦允許HRESULTs位於方法及特性的進或出參數位置。在該等情況下,HRESULTS被編列為未簽署的32位元值(如以下所述)。
對於在API中係列舉類型的經命名的元件(該等經命名的元件係為一組經命名的常數),該等以JavaScript表示為對各個經命名的值含有唯讀欄位的物件。
對於在API中係為「結構(structs)」的經命名的元件(經命名的資料欄位的收集),該等在JavaScript中表示為JavaScript物件。編列成JavaScript的結構被轉換成物件。在結構中各個經命名的欄位變成在JavaScript物件中經命名的特性。在結構中各個經命名的欄位之值被編列成按照欄位的下層類型。係為物件類型的JavaScript值可編列成結構。JavaScript物件或JavaScript物件的原型對結構的各個經命名的欄位含有經命名的欄位,且各個經命名的欄位之值係根據下層類型編列。在JavaScript物件中,於作業系統API結構中不具有均等的額外欄位被忽略。若任何結構值的編列失敗,則返回編列錯誤。
在此實例中,作業系統並非具有陣列的類型,但作業系統取而代之地允許對方法的引數,跟隨著對陣列的第一元件的指標,成為代表元件的數目(並非在陣列中之位元組)之一對未簽署的整數長度。
當將陣列編列成Javascript時,建立具有以下特徵的物件。物件具有對各個整數值介於0及陣列的長度、負1之間的特性,此特性可列舉、可撰寫但不可配置,且「長度」特性初始設定成向量的長度,此長度係不可撰寫、不可列舉且不可配置。此物件原型係為Array原型物件。此物件在索引特性上之[[Put]]操作於下層原始陣列上設定特定的索引。此物件在索引特性上之[[GetOwnProperty]]操作於下層原始陣列上編輯索引至下層原始陣列之中。身為「Array」,此物件不具有[[Class]]。當編列JavaScript物件時,若物件具有[[Class]]「Array」,則複製此陣列為原始陣列且通過對此陣列的參考值。若物件係為經投射的陣列,則通過下層原始陣列。
API亦可具有委派或回撥功能的經命名的元件,此係單一可調用方法的參考值。該等可投射至JavaScript中成為可呼叫物件。投射器將回撥委派包裝於自訂編列物件中。
編列成JavaScript的委派被包裝於JavaScript功能物件中。當調用功能物件時,編列引數成為由委派表明的均等參數類型,且接著調用經包裝的委派物件。若任何引數編列失敗,則委派呼叫失敗。若JavaScript引數比參數式的委派更少,則委派呼叫失敗。超出參數式的委派的額外JavaScript引數被忽略。在調用委派之後,出參數被編列成JavaScript類型。若任何出參數編列失敗,則委派呼叫失敗。出參數接著被編列成JavaScript值且被返回。
若原始JavaScript功能物件被編列成委派,則此可呼叫物件被包裝於相對應委派類型的委派中。當調用委派時,入參數被編列成JavaScript類型且接著調用JavaScript功能物件。若失敗編列任何引數,則委派呼叫失敗。在調用委派之後,返回的值被映射至基於以下規則的委派的出參數。首先,若無出參數,則忽略來自JavaScript功能物件的返回值。其次,若委派指定單一出參數,則來自JavaScript功能物件的返回值被編列成該類型。若編列失敗,則委派呼叫失敗。第三,若委派指定多重出參數,則來自JavaScript功能物件返回值的返回值係對各個出參數具有經命名的特性的物件。各個經命名的特性被編列成相對應出參數的類型。若返回值並非物件,則委派呼叫失敗。若返回的物件對各個出參數不含有經命名的特性,則委派呼叫失敗。若返回的物件含有不相對應於出參數的額外的經命名的特性,則該等物件被忽略。若任何經命名的特性失敗於編列成相對應的出參數類型,則委派呼叫失敗。
以下實例說明用於委派經呼叫的IString Collection的元資料,以及建立此委派的實例之擬JavaScript編碼。
示例性元資料:

擬JavaScript:

介面並非直接投射至JavaScript成為物件。然而,介面可為作業系統API方法的參數及返回類型。
為了提供在目標程式語言中自然的投射,在以上的實例中,投射成JavaScript的成員將該等成員之名稱改變成camelCase,跟隨在JavaScript中對成員使用camelCase名稱的強的慣例之後。近似於JavaScript建造功能的類型係照慣例為PascalCased,且該等類型被投射成該格式。類似地,enum特性、結構欄位、用於addEventListener樣式的事件名稱,在camelCase中具有名稱。
基於靜態類型資訊未知為運行時間級別的呈現,而被編列成JavaScript的介面實例,歷經以下步驟。首先,對介面進行呼叫,以獲得介面的運行時間級別名稱。若成功,物件被投射成運行時間級別實例物件(如下所述)。否則,物件被投射成好似物件係恰巧執行物件已知的執行之未命名運行時間級別的實例,及物件的中間所需介面。
檢查編列成介面類型的JavaScript值,以檢視該值係為投射的運行時間級別實例物件或投射的介面實例物件。若該值為運行時間級別物件,且該物件代理的初始值執行介面類型,則執行該介面的物件被通過至作業系統。否則,提出類型錯誤例外。
在作業系統API中的物件可為運行時間級別的實例。運行時間級別執行一組一或更多個介面(以下定義)。運行中物件的執行的介面的清單,可基於返回運行中物件的方法的元資料,或藉由存取運行時間級別名稱及查找元資料任一者而決定。因為JavaScript係基於原型、動態的語言,此不具有級別的構造。級別構造在JavaScript中被投射為物件。
因此,作業系統API物件在JavaScript中被投射為物件。定義於級別的所有執行的介面上的方法、特性及事件的合併,透過該合併之原型,而表示被暴露成在投射的JavaScript物件上可取得的經命名的特性的類型成員。JavaScript語言投射的消費者可直接存取級別的任何成員,而無須顧慮關於成員實際上定義於何者介面上。
JavaScript物件係為動態的,意謂於任何時間可在物件上添加或移除新的特性。只要預定義的介面成員不被撤銷或刪除,投射的物件可支援添加新的特性及方法。在JavaScript的詞彙中,投射的物件可延伸,但經命名的類型成員的收集不可配置。投射的物件具有原型,該原型具有來自運行時間級別所執行的介面定義於成員的收集上的實例成員。
如上所述的該等介面,具有方法、參數及事件。
於語言投射層處的方法被執行為對每一方法具有一儲存槽的vtable。關於介面的元資料提供方法名稱以及參數的名稱、類型及方向(進/出)。方法在JavaScript中投射為經投射的運行時間級別或介面物件上的可呼叫特性。該等特性係為{Writable=false,Enumerable=true,Configurable=false}。當被呼叫時,引數根據引數的相對應參數類型而編列,方法以該等值而呼叫。返回值編列為JavaScript值,而具有JavaScript物件返回作為該值。
於語言投射層處的特性被執行成提取及/或設定方法。存取特性值將呼叫提取方法,而更新特性值將調用設定方法。特性可為讀取或寫入(亦即,可利用提取及設定方法),或唯讀(亦即,僅可利用提取方法)。特性在JavaScript中投射為特性。編列特性值如以上所述取決於下層特性類型而作用。
於語言投射層處的事件係執行為添加及移除事件收聽者方法。添加方法採取委派實例且添加方法返回說明收聽者的資料,而移除方法採取說明收聽者且不返回的資料。
在JavaScript中,具有至少一個事件投射於任何經投射的運行時間級別或介面物件上的任何經投射的運行時間級別或介面物件,提取兩個額外的特性添加至該任何經投射的運行時間級別或介面物件之原型,addEventListener及removeEventListener。該等特性係為{Writable: false,Enumerable: true,Configurable: false},且該等特性被指派為可呼叫物件。
addEventListener功能提取串流引數,該串流引數代表所收聽的事件的名稱、指派作為收聽者的回撥功能,及被忽略的可選第三參數。此功能呼叫下層的add_Event方法,通過經編列的回撥功能作為委派,且此功能將所得到的訊標儲存於映射中,該映射由回撥功能物件的參考識別符所定調。
removeEventListener功能採取串流引數,該串流引數代表移除收聽者的事件的名稱、應被移除的回撥功能,及被忽略的可選第三參數。此功能藉由在儲存的訊標的映射中之參考識別符而查找,且若找到訊標,則呼叫下層的remove_Event方法,通過經檢索的訊標。
當事件被發射時,將調用以回撥通過的任何JavaScript功能物件。通過至功能物件的引數將為提供至EventHandler委派的引數之經編列的值。
如以上所顯示,藉由具有語言的API Projection層,由儲存於作業系統中的元資料所指定的作業系統API的經命名的元件可自動地被使用,以在作業系統API格式及應用程式語言格式之間建立物件且編列資料。應瞭解以上僅為在示例性作業系統及示例性程式語言之間投射的實例,且本發明並非限於此實例。
在已描述示例性實施之後,現將描述其中被設計成作業此系統的計算環境。以下說明意欲提供適合的計算環境的簡要大致描述,其中可實施此系統。可以大量的通用目的或特別目的計算硬體配置實施系統。眾所周知可為適合的計算裝置之實例包括但非限於個人電腦、伺服器電腦、手持或膝上型裝置(舉例而言,媒體播放器、筆記型電腦、手機、個人資料助理、錄音機)、多重處理器系統、基於微處理器的系統、機上盒、遊戲操縱台、可程式消費電子、網路PC、迷你電腦、大型電腦、包括上述系統或裝置之任一者的分散式計算環境,及類似者。
第4圖圖示適合的計算系統環境的實例。計算系統環境係僅為適合的計算環境之一個實例,且計算系統環境並非意欲建議對此計算環境的使用或功能的範疇作任何限制。計算環境亦不應詮釋為具有關於圖示於示例性作業環境中的組件的任一者或結合之任何依賴或需求。
參看第4圖,示例性計算環境包括諸如計算機器400的計算機器。在最基本的配置中,計算機器400典型地包括至少一個處理單元402及記憶體404。計算裝置可包括多重處理單元及/或額外的共同處理單元,例如圖形處理單元420。取決於計算裝置的確切配置及類型,記憶體404可為揮發性(例如RAM)、非揮發性(例如ROM、快閃記憶體等等)或兩者之某些結合。此最基本的配置係藉由虛線406圖示於第4圖中。此外,計算機器400亦可具有額外的特徵/功能。舉例而言,計算機器400亦可包括額外的儲存(可移除及/或不可移除),包括但非限於磁碟或光碟或磁帶。此額外的儲存係藉由可移除儲存408及不可移除儲存410圖示於第4圖中。電腦儲存媒體包括以任何方法或技術實施,用於儲存資訊的可揮發及不可揮發、可移除及不可移除媒體,該等資訊例如電腦程式指令、資料結構、程式模組或其他資料。記憶體404、可移除儲存408及不可移除儲存410均為電腦儲存媒體的實例。電腦儲存媒體包括但非限於RAM、ROM、EEPROM、快閃記憶體或其他記憶技術、CD-ROM、數位光碟(DVD)或其他光學儲存、磁性卡匣、磁帶、磁碟儲存或其他磁性儲存裝置,或可用以儲存所欲資訊且可由計算機器400存取的任何其他媒體。任何此電腦儲存媒體可為計算機器400的部分。
計算機器400亦可含有通訊連接412,該通訊連接412允許裝置與其他裝置通訊。通訊連接412係通訊媒體的實例。通訊媒體典型地承載電腦程式指令、資料結構、程式模組或其他資料於調變資料訊號中,調變資料訊號例如載波或其他傳送機制,且包括任何資訊傳遞媒體。「調變資料訊號」一詞意謂具有一或更多特徵組的訊號,或以此方式改變而編碼資訊於訊號中,從而改變訊號的接收裝置的配置或狀態。藉由實例的方式且非限制,通訊媒體包括諸如有限網路或直接連線的有線媒體,及諸如聽覺、RF、紅外線及其他無線媒體的無線媒體。
計算機器400可具有各種輸入裝置414,例如顯示器、鍵盤、滑鼠、筆、相機、觸碰輸入裝置等等。亦可包括諸如喇叭、印表機等等的輸出裝置416。所有該等裝置係本領域中眾所周知的,且所有該等裝置無須在此花篇幅的討論。
此系統可實施於一般情境的軟體,包括電腦可執行指令及/或電腦編譯指令,例如由計算機器所處理的程式模組。一般而言,程式模組包括常式、程式、物件、組件、資料結構等等,當該等程式模組由處理單元處理時,指導處理單元實行特定任務或實施特定抽象資料類型。此系統可執行於分散式計算環境中,在該等分散式計算環境中任務係由透過通訊網路鏈結的遠端處理裝置實行。在分散式計算環境中,程式模組可位於包括記憶體儲存裝置的本端及遠端電腦儲存媒體兩者中。
隨附申請專利範圍的前言中,「製造物品」、「程序」、「機器」之詞彙係意欲限制請求項為落入可專利標的之範疇。
此處上述的任何或所有的替代實施例可使用於任何所欲的結合以形成額外的混合實施例。應瞭解於隨附申請專利範圍中定義的標的並非必須限制為上述的特定實施。上述的特定實施僅揭露作為實例。
100...應用程式
102...API
104...作業系統
106...程式
108...編譯器/解譯器
110...元資料
112...開發工具
400...計算機器
402...處理單元
404...記憶體
406...虛線
408...可移除儲存
410...不可移除儲存
412...通訊連接
414...輸入裝置
416...輸出裝置
420...圖形處理單元
第1圖係包括將API投射至其他程式語言的系統的方塊圖。
第2圖係圖示開發工具的示例性操作的流程圖。
第3圖係圖示編譯器或解譯器的示例性操作的流程圖。
第4圖係示例性計算裝置的方塊圖,其中可實施此系統。
100...應用程式
102...API
104...作業系統
106...程式
108...編譯器/解譯器
110...元資料
112...開發工具
权利要求:
Claims (18)
[1] 一種電腦實施程序,包含以下步驟:接收元資料至記憶體之中,該元資料描述一作業系統的應用程式介面;接收一指示,該指示將一程式語言的一程式中一經命名的元件連結至該等應用程式介面之一者的一元件;及使用該元資料,投射該應用程式介面的該經命名的元件。
[2] 如請求項第1項之電腦實施程序,其中投射步驟包含以下步驟:當編譯該程式時,建立用以建立一或更多元件的編碼,且根據類型編列用於該等經建立的元件的資料。
[3] 如請求項第1項之電腦實施程序,其中投射步驟包含以下步驟:當解譯該程式時,建立用以建立一或更多元件的編碼,且根據類型編列用於該等經建立的元件的資料。
[4] 如請求項第1項之電腦實施程序,其中投射步驟包含以下步驟:根據類型,編列介於一作業系統表現及一應用程式表現之間的資料。
[5] 如請求項第1項之電腦實施程序,其中投射步驟包含以下步驟:投射一介面,該介面包括方法、特性及事件。
[6] 如請求項第1項之電腦實施程序,其中投射步驟包含以下步驟:從該作業系統傳播例外至該應用程式。
[7] 一種製造物品,包含:一電腦儲存媒體;電腦程式指令,該等電腦程式指令儲存於該電腦儲存媒體上,當由一處理裝置處理該等電腦程式指令時,該等電腦程式指令指導該處理裝置實行一程序,該程序包含以下步驟:接收元資料至記憶體之中,該元資料描述一作業系統的應用程式介面;接收一指示,該指示將一程式語言中的一經命名的元件連結至該等應用程式介面之一者的一元件;及使用該元資料,投射該應用程式介面的該經命名的元件。
[8] 如請求項第7項之製造物品,其中投射步驟包含以下步驟:於編譯時間,建立用以建立一或更多元件的編碼,且根據類型編列用於該等經建立的元件的資料。
[9] 如請求項第7項之製造物品,其中投射步驟包含以下步驟:當解譯該程式時,建立用以建立一或更多元件的編碼,且根據類型編列用於該等經建立的元件的資料。
[10] 如請求項第7項之電腦實施程序,其中投射步驟包含以下步驟:根據類型,編列介於一作業系統表現及一應用程式表現之間的資料。
[11] 如請求項第7項之電腦實施程序,其中投射步驟包含以下步驟:投射一介面,該介面包括方法、特性及事件。
[12] 如請求項第7項之電腦實施程序,其中投射步驟包含以下步驟:從該作業系統傳播例外至該應用程式。
[13] 一種計算機器,包含:一或更多處理器;一或更多電腦儲存媒體;電腦程式指令,該等電腦程式指令儲存於該電腦儲存媒體上,當由一處理裝置處理該等電腦程式指令時,該等電腦程式指令以一程式語言實施介於一作業系統的應用程式介面及應用程式之間的一語言投射;其中該等應用程式介面係由儲存於記憶體中的元資料描述;及其中該語言投射接收一指示,該指示將一程式語言中的一經命名的元件連結至該等應用程式介面之一者的一元件,且使用該元資料,以該程式語言投射該應用程式介面的該經命名的元件至該應用程式。
[14] 如請求項第13項之計算機器,其中投射步驟包含以下步驟:於編譯時間,建立用以建立一或更多元件的編碼,且根據類型編列用於該等經建立的元件的資料。
[15] 如請求項第13項之計算機器,其中投射步驟包含以下步驟:當解譯該程式時,建立用以建立一或更多元件的編碼,且根據類型編列用於該等經建立的元件的資料。
[16] 如請求項第13項之計算機器,其中投射步驟包含以下步驟:根據類型,編列介於一作業系統表現及一應用程式表現之間的資料。
[17] 如請求項第13項之計算機器,其中投射步驟包含以下步驟:投射一介面,該介面包括方法、特性及事件。
[18] 如請求項第13項之製造物品,其中投射步驟包含以下步驟:從該作業系統傳播例外至該應用程式。
类似技术:
公开号 | 公开日 | 专利标题
TWI536263B|2016-06-01|將作業系統之原始應用程式介面投射至其它程式語言
US6063128A|2000-05-16|Object-oriented computerized modeling system
US5815415A|1998-09-29|Computer system for portable persistent modeling
US8332828B2|2012-12-11|System for translating diverse programming languages
US9690554B2|2017-06-27|Unified data type system and method
US7174533B2|2007-02-06|Method, system, and program for translating a class schema in a source language to a target language
KR101795844B1|2017-11-08|런타임 시스템
US9830146B2|2017-11-28|API lifecycle platform and version management
US8656372B2|2014-02-18|System for translating diverse programming languages
JP2014525622A|2014-09-29|オペレーティングシステムのネイティブアプリケーションプログラミングインターフェイスのメタデータを用いた記述
US20060212847A1|2006-09-21|Type checker for a typed intermediate representation of object-oriented languages
WO2014062950A1|2014-04-24|Code dependency calculation
US20150242194A1|2015-08-27|System for Translating Diverse Programming Languages
US20060212861A1|2006-09-21|Typed intermediate representation for object-oriented languages
US20180018163A1|2018-01-18|Overriding a migrated method in an updated type
Bell et al.2008|Learn to Tango with D
US9720660B2|2017-08-01|Binary interface instrumentation
同族专利:
公开号 | 公开日
RU2014107726A|2015-09-10|
AU2011375748A1|2014-03-06|
JP2014525623A|2014-09-29|
US20150020084A1|2015-01-15|
CA2845480A1|2013-03-07|
CN102866884B|2016-09-28|
WO2013032506A1|2013-03-07|
TWI556170B|2016-11-01|
MX2014002474A|2014-03-27|
KR20140067017A|2014-06-03|
US20130055292A1|2013-02-28|
US9229790B2|2016-01-05|
TW201619820A|2016-06-01|
MX366619B|2019-07-16|
RU2598600C2|2016-09-27|
JP5905577B2|2016-04-20|
CN102866884A|2013-01-09|
KR101896138B1|2018-09-07|
MX339807B|2016-06-10|
CA2845480C|2018-03-13|
BR112014004469A2|2017-03-28|
EP2751673A4|2015-03-04|
TWI536263B|2016-06-01|
US8695021B2|2014-04-08|
EP2751673A1|2014-07-09|
AU2011375748B2|2016-11-24|
引用文献:
公开号 | 申请日 | 公开日 | 申请人 | 专利标题
US5097533A|1988-11-29|1992-03-17|International Business Machines Corporation|System and method for interfacing computer application programs written in different languages to a software system|
US5339422A|1991-03-07|1994-08-16|Digital Equipment Corporation|System and method for jacketing cross-domain calls in a multi-code execution and debugging system within a multi-architecture environment|
US5910180A|1995-11-21|1999-06-08|Diamond Multimedia Systems, Inc.|Context virtualizing device driver architecture|
US5887172A|1996-01-10|1999-03-23|Sun Microsystems, Inc.|Remote procedure call system and method for RPC mechanism independent client and server interfaces interoperable with any of a plurality of remote procedure call backends|
US6035342A|1997-03-19|2000-03-07|Microsoft Corporation|Method and computer program product for implementing object relationships|
US6026238A|1997-08-18|2000-02-15|Microsoft Corporatrion|Interface conversion modules based upon generalized templates for multiple platform computer systems|
US20050182828A1|1999-04-21|2005-08-18|Interactual Technologies, Inc.|Platform specific execution|
US6745385B1|1999-09-01|2004-06-01|Microsoft Corporation|Fixing incompatible applications by providing stubs for APIs|
EP1117033A1|2000-01-14|2001-07-18|Sun Microsystems, Inc.|Dynamic dispatch function|
US7783720B1|2000-04-21|2010-08-24|Oracle America, Inc.|CORBA metadata gateway to telecommunications management network|
US6813770B1|2000-04-21|2004-11-02|Sun Microsystems, Inc.|Abstract syntax notation to interface definition language converter framework for network management|
US7577834B1|2000-05-09|2009-08-18|Sun Microsystems, Inc.|Message authentication using message gates in a distributed computing environment|
US6691302B1|2000-05-31|2004-02-10|Siemens Information & Communications Networks, Inc.|Interfacing a service component to a native API|
US7631084B2|2001-11-02|2009-12-08|Juniper Networks, Inc.|Method and system for providing secure access to private networks with client redirection|
US7574346B2|2000-10-30|2009-08-11|Microsoft Corporation|Kernel emulator for non-native program modules|
US7065742B1|2000-10-30|2006-06-20|Microsoft Corporation|System and method for dynamically processing declarative language instance data|
US6993744B2|2000-12-19|2006-01-31|Tajen Corporation|Method for enabling a compiler or interpreter to use identifiers found at run time in a map container object in a manner similar or identical to identifiers declared at compile time|
US20020161596A1|2001-04-30|2002-10-31|Johnson Robert E.|System and method for validation of storage device addresses|
US6996832B2|2001-05-30|2006-02-07|Bea Systems, Inc.|System and method for software component plug-in framework|
CA2349905A1|2001-06-07|2002-12-07|Ibm Canada Limited-Ibm Canada Limitee|System and method of mapping between software objects and structured language element based documents|
US7581231B2|2001-07-10|2009-08-25|Microsoft Corporation|Computing system and method for allowing plurality of applications written in different programming languages to communicate and request resources or services via a common language runtime layer|
US7165239B2|2001-07-10|2007-01-16|Microsoft Corporation|Application program interface for network software platform|
US20040201600A1|2001-12-14|2004-10-14|Microsoft Corporation|Methods and system for providing an XML-based interface description language|
US7330971B1|2002-01-11|2008-02-12|Microsoft Corporation|Delegated administration of namespace management|
US20030188043A1|2002-03-27|2003-10-02|Woodall Thomas R.|Two layer middleware architecture with an intermediate target independent interface|
US7320123B2|2002-04-01|2008-01-15|Sun Microsystems, Inc.|Method and system for detecting deprecated elements during runtime|
US7424717B2|2002-05-01|2008-09-09|Bea Systems, Inc.|Systems and methods for business process plug-in development|
US7219339B1|2002-10-29|2007-05-15|Cisco Technology, Inc.|Method and apparatus for parsing and generating configuration commands for network devices using a grammar-based framework|
US7412658B2|2002-11-14|2008-08-12|Sap Ag|Modeling system for graphic user interface|
US7171539B2|2002-11-18|2007-01-30|Arm Limited|Apparatus and method for controlling access to a memory|
US7546607B2|2002-11-19|2009-06-09|Microsoft Corporation|Native code exposing virtual machine managed object|
US7784044B2|2002-12-02|2010-08-24|Microsoft Corporation|Patching of in-use functions on a running computer system|
US6993603B2|2002-12-09|2006-01-31|Microsoft Corporation|Managed file system filter model and architecture|
US7197417B2|2003-02-14|2007-03-27|Advantest America R&D Center, Inc.|Method and structure to develop a test program for semiconductor integrated circuits|
US7846023B2|2003-03-27|2010-12-07|Microsoft Corporation|Application-centric user interface techniques|
US7383255B2|2003-06-23|2008-06-03|Microsoft Corporation|Common query runtime system and application programming interface|
US7380235B1|2003-06-27|2008-05-27|Microsoft Corporation|Application program interface call replay tool|
US7519951B2|2003-09-30|2009-04-14|International Business Machines Corporation|Multi-attribute dynamic link library packaging|
US20050091271A1|2003-10-23|2005-04-28|Kasy Srinivas|Systems and methods that schematize audio/video data|
US7493592B2|2003-10-24|2009-02-17|Microsoft Corporation|Programming interface for a computer platform|
US7721254B2|2003-10-24|2010-05-18|Microsoft Corporation|Programming interface for a computer platform|
US8055907B2|2003-10-24|2011-11-08|Microsoft Corporation|Programming interface for a computer platform|
US20050114832A1|2003-11-24|2005-05-26|Microsoft Corporation|Automatically generating program code from a functional model of software|
US7392527B2|2003-12-10|2008-06-24|Microsoft Corporation|Driver-specific context for kernel-mode shimming|
GB2409735A|2003-12-30|2005-07-06|Ibm|Method and system for change management of interfaces in distributed computer systems|
US7694315B2|2004-02-13|2010-04-06|Microsoft Corporation|Schema-based machine generated programming models|
US7444621B2|2004-02-20|2008-10-28|Microsoft Corporation|Method and system for providing a common operating system|
US20050216552A1|2004-03-24|2005-09-29|Samuel Fineberg|Communication-link-attached persistent memory system|
US7707583B2|2004-05-20|2010-04-27|Sap Ag|Robust sharing of runtime systems|
US20050268308A1|2004-05-28|2005-12-01|Nokia Corporation|System and method for implementing a general application program interface|
US8306991B2|2004-06-07|2012-11-06|Symantec Operating Corporation|System and method for providing a programming-language-independent interface for querying file system content|
US7941402B2|2004-09-24|2011-05-10|Sap Ag|Storing and using classes in databases|
US8060856B2|2004-11-18|2011-11-15|Aol Inc.|Native objects accessible by platform neutral API|
US20060161910A1|2005-01-14|2006-07-20|International Business Machines Corporation|Method, system and program product for automatically ensuring compatability of a code module loaded into a program-code environment|
US7950023B2|2005-02-04|2011-05-24|Microsoft Corporation|Utilizing abstract descriptions to generate, exchange, and configure service and client runtimes|
US7519713B2|2005-02-04|2009-04-14|Microsoft Corporation|Mapping between object oriented and service oriented representations of a distributed application|
US7325007B2|2005-03-07|2008-01-29|Microsoft Corporation|System and method for supporting non-native data types in a database API|
US7685635B2|2005-03-11|2010-03-23|Microsoft Corporation|Systems and methods for multi-level intercept processing in a virtual machine environment|
US7716661B2|2005-03-16|2010-05-11|Microsoft Corporation|Embedded device update service|
US8898123B2|2005-06-07|2014-11-25|Rockwell Automation Technologies, Inc.|Method and system for interface configuration via device-side scripting|
US20060287890A1|2005-06-15|2006-12-21|Vanderbilt University|Method and apparatus for organizing and integrating structured and non-structured data across heterogeneous systems|
US7992140B2|2005-07-29|2011-08-02|Microsoft Corporation|Compiler supporting programs as data objects|
US20070039010A1|2005-08-15|2007-02-15|Microsoft Corporation|Automatic generation of software code to facilitate interoperability|
KR101198583B1|2005-10-12|2012-11-06|한국과학기술원|메타데이터를 이용한 멀티미디어 미들웨어 장치와 그 관리방법 및 기록 매체|
US7624257B2|2005-11-30|2009-11-24|International Business Machines Corporation|Digital data processing apparatus having hardware multithreading support including a register set reserved for special class threads|
US7716246B2|2005-11-30|2010-05-11|Microsoft Corporation|Dynamic mechanism for providing metadata|
US20070156913A1|2005-12-30|2007-07-05|Hiroyuki Miyamoto|Method for enabling extension points through plug-ins|
US9081585B1|2006-03-31|2015-07-14|The Mathworks, Inc.|Interfacing a device driver with an application using a virtual driver interface and a strategy|
AT468556T|2006-04-13|2010-06-15|Microsoft Corp|Virtuelles ausführungssystem für ressourcen- beschränkte geräte|
US8104048B2|2006-08-04|2012-01-24|Apple Inc.|Browsing or searching user interfaces and other aspects|
AT496350T|2006-09-11|2011-02-15|Software Ag|System zur verwaltung des lebenszyklus einer dienstorientierten architektur|
GB0619147D0|2006-09-28|2006-11-08|Ibm|A method, apparatus or software for managing software component version identifications in a componentised software system|
US7971208B2|2006-12-01|2011-06-28|Microsoft Corporation|Developing layered platform components|
US8370818B2|2006-12-02|2013-02-05|Time Warner Cable Inc.|Methods and apparatus for analyzing software interface usage|
JP2009020705A|2007-07-12|2009-01-29|Hitachi Ltd|Guiアプリケーション開発支援装置及び開発支援方法|
US20090024986A1|2007-07-19|2009-01-22|Microsoft Corporation|Runtime code modification|
US8667482B2|2007-08-10|2014-03-04|Microsoft Corporation|Automated application modeling for application virtualization|
KR100927442B1|2007-08-16|2009-11-19|주식회사 마크애니|가상 응용프로그램 생성 시스템, 가상 응용프로그램 설치방법, 네이티브 api 호출 처리 방법 및 가상응용프로그램 수행 방법|
US8364683B2|2007-08-30|2013-01-29|International Business Machines Corporation|Importing and reconciling resources from disjoint name spaces to a common namespace|
US20090132285A1|2007-10-31|2009-05-21|Mckesson Information Solutions Llc|Methods, computer program products, apparatuses, and systems for interacting with medical data objects|
KR101528853B1|2007-12-14|2015-07-01|삼성전자주식회사|Api 서비스 방법과 api 매쉬업 생성 방법, 장치 및기록매체|
US8250524B2|2007-12-21|2012-08-21|Microsoft Corporation|Contract programming for code error reduction|
EP2088506A1|2008-02-06|2009-08-12|Software AG|Method and system for calling services from a remote client|
US9639375B2|2008-08-28|2017-05-02|Red Hat, Inc.|Generation of language bindings for libraries using data from compiler generated debug information|
US8484204B2|2008-08-28|2013-07-09|Microsoft Corporation|Dynamic metadata|
US8595714B1|2009-03-04|2013-11-26|Amazon Technologies, Inc.|User controlled environment updates in server cluster|
GB0907171D0|2009-04-27|2009-06-10|Springsource Ltd|Method and apparatus for automatically generating source code files in a storage unit|
US9075667B2|2009-05-21|2015-07-07|Microsoft Technology Licensing, Llc|Dynamic binding directed by static types|
US8510729B2|2009-05-21|2013-08-13|Salesforce.Com, Inc.|System, method and computer program product for versioning and deprecation of components of an application|
US8495621B2|2009-06-15|2013-07-23|Microsoft Corporation|Catalog-based software component management|
US8983982B2|2009-12-22|2015-03-17|Bmc Software, Inc.|Mechanism for deprecating object oriented data|
US9483284B2|2011-02-25|2016-11-01|Red Hat, Inc.|Version compatibility determination|
US8776094B2|2011-08-11|2014-07-08|Microsoft Corporation|Runtime system|
US9619779B2|2011-08-26|2017-04-11|Apple Inc.|Client-side policy enforcement of developer API use|
US20130055291A1|2011-08-31|2013-02-28|Microsoft Corporation|Describing native application programming interfaces of an operating system with metadata|
US9262183B2|2012-04-23|2016-02-16|Microsoft Technology Licensing, Llc|Self-service composed web APIs|
US8954479B2|2012-06-13|2015-02-10|International Business Machines Corporation|End-to-end interoperability and workflows from building architecture design to one or more simulations|
US9444899B2|2012-12-26|2016-09-13|Microsoft Technology Licensing, Llc|Use of internet information services logging to collect user information in an asynchronous manner|
US8793359B1|2013-11-25|2014-07-29|Software Ag|Systems and/or methods for intelligently detecting API key domains|US9798524B1|2007-12-04|2017-10-24|Axway, Inc.|System and method for exposing the dynamic web server-side|
US9116780B2|2013-02-06|2015-08-25|Google Inc.|Method for modeling source code having code segments that lack source location|
US9864861B2|2014-03-27|2018-01-09|Intel Corporation|Object oriented marshaling scheme for calls to a secure region|
US10635504B2|2014-10-16|2020-04-28|Microsoft Technology Licensing, Llc|API versioning independent of product releases|
US10394552B2|2016-05-17|2019-08-27|Dropbox, Inc.|Interface description language for application programming interfaces|
US10146519B2|2016-09-20|2018-12-04|Bluedata Software, Inc.|Generation and deployment of scripts for large scale processing framework services|
CN107957911B|2016-10-18|2019-07-05|腾讯科技(深圳)有限公司|组件调用的方法和装置、组件数据处理的方法和装置|
EP3632101A1|2017-05-23|2020-04-08|Koninklijke KPN N.V.|Coordinate mapping for rendering panoramic scene|
US10620980B2|2018-03-28|2020-04-14|Microsoft Technology Licensing, Llc|Techniques for native runtime of hypertext markup language graphics content|
US10866845B2|2018-05-16|2020-12-15|Microsoft Technology Licensing, Llc|Exposing native OS APIS in a web browser|
CN108920218A|2018-05-23|2018-11-30|北京五八信息技术有限公司|一种反射调用方法、装置、终端及计算机可读存储介质|
US10725745B2|2018-05-24|2020-07-28|Walmart Apollo, Llc|Systems and methods for polyglot analysis|
CN108920133B|2018-06-14|2021-06-18|北京三快在线科技有限公司|跨语言编程方法、装置、电子设备及存储介质|
US10838780B2|2018-12-10|2020-11-17|Mcafee, Llc|Portable hosted content|
法律状态:
2019-03-01| MM4A| Annulment or lapse of patent due to non-payment of fees|
优先权:
申请号 | 申请日 | 专利标题
US13/223,296|US8695021B2|2011-08-31|2011-08-31|Projecting native application programming interfaces of an operating system into other programming languages|
[返回顶部]